import { fileURLToPath } from 'node:url';

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';

//引入按需自动引入api
import AutoImport from 'unplugin-auto-import/vite';
//引入自动生成路由的api
import Pages from 'vite-plugin-pages';

//引入模板布局
import Layouts from 'vite-plugin-vue-layouts-next';

//引入自动引入组件
import Components from 'unplugin-vue-components/vite';

//引入自定义规则
import { NeedTabbar, NoNeedLogin } from './src/routers/rules';

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    // vueDevTools(),
    AutoImport({
      //指向引入那些插件的api
      imports: ['vue', 'vue-router', 'pinia'],
      dts: 'src/auto-imports.d.ts', //生成的类型声明文件
    }),
    Pages({
      dirs: 'src/views', //指定路由目录
      exclude: ['**/components/*.vue'], //指定路由文件的后缀名

      //路由拓展
      extendRoute(route){
        route.meta = {
          isLogin:true, //默认需要登录
          layout:false, //默认布局文件
        }

        //无需登录的路由设置
        if(NoNeedLogin.includes(route.path))
          {
              route.meta.isLogin = false;
          }

          //无需底部导航栏的路由设置
          if(NeedTabbar.includes(route.path))
          {
              route.meta.layout = 'Index';
          }

          return route;
      }
    }),
    Layouts({
      layoutsDirs: 'src/layouts', //指定布局目录
      defaultLayout: 'index', //默认布局文件
      pagesDir: 'src/views', //指定路由目录
    }),
    Components({
      //指定组件位置，默认是src/components
      dirs: ['src/components'],
      //ui库解析
      //resolvers: [ElementPlusResolver()],
      extensions: ['vue'], //指定组件文件的后缀名
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)), //设置@指向src目录
    },
  },

  server: {
    proxy: {
      //设置代理请求，当代理商识别你的请求的前缀是 /shop 时，就会自动转移
      '/shop': {
        // target: 'http://www.fast.com/shop', //目标地址
        target: 'http://www.cloudplatform.fangchengyu.fun/shop', //目标地址
        changeOrigin: true, //是否跨域
        //替换掉shop前缀，防止多个/shop地址
        rewrite: (path) => path.replace(/^\/shop/, ''),
      },
    },

    hmr: {
      //设置热更新的端口号
      overlay: false, //关闭热更新的错误提示
    },
  }
})
